# This source is part of CompressTools (c) 2015 by Bregalad
# This is open source and free software.
#
# Please adapt this makefile to your own needs manually before compiling

# Points to C++ compiler
# Linux
#CPPC=g++

# 32-bit Windows
CPPC=i686-w64-mingw32-g++ -std=gnu++98

# Compliation flags
FLAGS=-m32 -Wall -Os -fomit-frame-pointer -flto -c

# Linking flags

# Linux
#WHOLE=-march=native -Os -flto -fwhole-program -s

# Windows
WHOLE=-m32 -Os -flto -fwhole-program -static -s

all : ../compress_tools

../compress_tools: bitpack_rle.o byte_pair.o escape_rle.o hufflib.o huffman.o huffnode.o main.o output.o ram_lz77.o rle.o rleinc1.o rleinc2.o rom_7bit_lz77.o rom_lz77.o static_dictionary.o tiny_huff.o tiny_huff_fixed.o
	$(CPPC) $(WHOLE) -o ../compress_tools bitpack_rle.o byte_pair.o escape_rle.o hufflib.o huffman.o huffnode.o main.o output.o ram_lz77.o rle.o rleinc1.o rleinc2.o rom_7bit_lz77.o rom_lz77.o static_dictionary.o tiny_huff.o tiny_huff_fixed.o

main.o: encoding.hpp output.hpp main.cpp 
	$(CPPC) $(FLAGS) main.cpp -o main.o

output.o: encoding.hpp output.cpp
	$(CPPC) $(FLAGS) output.cpp -o output.o

# Librairies
hufflib.o: encoding.hpp hufflib.hpp hufflib.cpp
	$(CPPC) $(FLAGS) hufflib.cpp -o hufflib.o

huffnode.o: huffnode.hpp huffnode.cpp
	$(CPPC) $(FLAGS) huffnode.cpp -o huffnode.o

# Compression algorithms
rle.o : encoding.hpp rle.cpp
	$(CPPC) $(FLAGS) rle.cpp -o rle.o

bitpack_rle.o : encoding.hpp bitpack_rle.cpp
	$(CPPC) $(FLAGS) bitpack_rle.cpp -o bitpack_rle.o

escape_rle.o: encoding.hpp escape_rle.cpp
	$(CPPC) $(FLAGS) escape_rle.cpp -o escape_rle.o

rleinc1.o: encoding.hpp rleinc1.cpp
	$(CPPC) $(FLAGS) rleinc1.cpp -o rleinc1.o

rleinc2.o: encoding.hpp rleinc2.cpp
	$(CPPC) $(FLAGS) rleinc2.cpp -o rleinc2.o

byte_pair.o: encoding.hpp byte_pair.cpp
	$(CPPC) $(FLAGS) byte_pair.cpp -o byte_pair.o

tiny_huff.o: encoding.hpp hufflib.hpp tiny_huff.cpp
	$(CPPC) $(FLAGS) tiny_huff.cpp -o tiny_huff.o

tiny_huff_fixed.o: encoding.hpp hufflib.hpp tiny_huff_fixed.cpp
	$(CPPC) $(FLAGS) tiny_huff_fixed.cpp -o tiny_huff_fixed.o

huffman.o: encoding.hpp huffnode.hpp hufflib.hpp huffman.cpp
	$(CPPC) $(FLAGS) huffman.cpp -o huffman.o

ram_lz77.o: encoding.hpp ram_lz77.cpp
	$(CPPC) $(FLAGS) ram_lz77.cpp -o ram_lz77.o

rom_lz77.o: encoding.hpp rom_lz77.cpp
	$(CPPC) $(FLAGS) rom_lz77.cpp -o rom_lz77.o

rom_7bit_lz77.o: encoding.hpp rom_7bit_lz77.cpp
	$(CPPC) $(FLAGS) rom_7bit_lz77.cpp -o rom_7bit_lz77.o

static_dictionary.o: encoding.hpp hashmap.hpp static_dictionary.cpp
	$(CPPC) $(FLAGS) static_dictionary.cpp -o static_dictionary.o

#.... add your own encoding algorithms here .....

clean:
	rm *.o
	rm ../compress_tools